home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer 2.0 / Internet Surfer 2.0 (Wayzata Technology) (1996).iso / pc / text / mac / faqs.220 < prev    next >
Text File  |  1996-02-12  |  28KB  |  769 lines

  1. Frequently Asked Questions (FAQS);faqs.220
  2.  
  3.  
  4. Section 11. Stdio
  5.  
  6. 11.1:    Why doesn't the code "char c; while((c = getchar()) != EOF)..."
  7.     work?
  8.  
  9. A:    The variable to hold getchar's return value must be an int.
  10.  
  11. 11.2:    Why does errno contain ENOTTY after a call to printf?
  12.  
  13. A:    Don't worry about it.  It is only meaningful for a program to
  14.     inspect the contents of errno after an error has occurred.
  15.  
  16. 11.3:    My program's prompts and intermediate output don't always show
  17.     up on the screen, especially when I pipe the output through
  18.     another program.
  19.  
  20. A:    It is best to use an explicit fflush(stdout) whenever output
  21.     should definitely be visible.
  22.  
  23. 11.4:    When I read from the keyboard with scanf, it seems to hang until
  24.     I type one extra line of input.
  25.  
  26. A:    scanf was designed for free-format input, which is seldom what
  27.     you want when reading from the keyboard.
  28.  
  29. 11.5:    Will fflush(stdin) flush unread characters from the standard
  30.     input stream?
  31.  
  32. A:    No.
  33.  
  34. 11.6:    Once I've used freopen, how can I get the original stdout back?
  35.  
  36. A:    It's not easy.  Try avoiding freopen.
  37.  
  38. 11.7:    How can I recover the file name given an open file descriptor?
  39.  
  40. A:    This problem is, in general, insoluble.  It is best to remember
  41.     the names of files yourself when you open them.
  42.  
  43.  
  44. Section 12. Library Subroutines
  45.  
  46. 12.1:    I'm trying to sort an array of strings with qsort, using strcmp
  47.     as the comparison function, but it's not working.
  48.  
  49. A:    You'll have to write a "helper" comparison function which takes
  50.     two generic pointer arguments, converts them to char **, and
  51.     dereferences them, yielding char *'s which can be usefully
  52.     compared.
  53.  
  54. 12.2:    Now I'm trying to sort an array of structures with qsort.  My
  55.     comparison routine takes pointers to structures, but the
  56.     compiler complains that the function is of the wrong type for
  57.     qsort.  How can I cast the function pointer to shut off the
  58.     warning?
  59.  
  60. A:    The conversions must be in the comparison function, which must
  61.     be declared as accepting "generic pointers" (void * or char *).
  62.  
  63. 12.3:    How can I convert numbers to strings?
  64.  
  65. A:    Just use sprintf.
  66.  
  67. 12.4:    How can I get the time of day in a C program?
  68.  
  69. A:    Just use the time, ctime, and/or localtime functions.
  70.  
  71. 12.5:    How can I convert a struct tm or a string into a time_t?
  72.  
  73. A:    The ANSI mktime routine converts a struct tm to a time_t.
  74.     No standard routine exists to parse strings.
  75.  
  76. 12.6:    I need a random number generator.
  77.  
  78. A:    The standard C library has one: rand().
  79.  
  80. 12.7:    Each time I run my program, I get the same sequence of random
  81.     numbers.
  82.  
  83. A:    You can call srand() to seed the pseudo-random number generator
  84.     with a more random initial value.
  85.  
  86. 12.8:    I need a random true/false value, so I'm taking rand() % 2, but
  87.     it's just alternating 0, 1, 0, 1, 0...
  88.  
  89. A:    Try using the higher-order bits.
  90.  
  91. 12.9-13: I'm trying to port this old program.  Why do I get "undefined
  92.     external" errors for some library routines?
  93.  
  94. A:    Some semistandard routines have been renamed or replaced over
  95.     the years; see the full list for details.
  96.  
  97. 12.14:    How can I execute a command with system() and read its output
  98.     into a program?
  99.  
  100. A:    Unix and some other systems provide a popen() routine.
  101.  
  102. 12.15:    How can I read a directory in a C program?
  103.  
  104. A:    See if you can use the opendir() and readdir() routines.
  105.  
  106.  
  107. Section 13. Lint
  108.  
  109. 13.1:    I just typed in this program, and it's acting strangely.
  110.     Can you see anything wrong with it?
  111.  
  112. A:    Try running lint first.
  113.  
  114. 13.2:    How can I shut off the "warning: possible pointer alignment
  115.     problem" message lint gives me for each call to malloc?
  116.  
  117. A:    It may be easier simply to ignore the message, perhaps in an
  118.     automated way with grep -v.
  119.  
  120. 13.3:    Where can I get an ANSI-compatible lint?
  121.  
  122. A:    See the unabridged list for two commercial products.
  123.  
  124.  
  125. Section 14. Style
  126.  
  127. 14.1:    Is the code "if(!strcmp(s1, s2))" good style?
  128.  
  129. A:    Perhaps; perhaps not.
  130.  
  131. 14.2:    What's the best style for code layout in C?
  132.  
  133. A:    There is no one "best style," but see the full list for a few
  134.     suggestions.
  135.  
  136. 14.3:    Where can I get the "Indian Hill Style Guide" and other coding
  137.     standards?
  138.  
  139. A:    See the unabridged list.
  140.  
  141.  
  142. Section 15. Floating Point
  143.  
  144. 15.1:    My floating-point calculations are acting strangely and giving
  145.     me different answers on different machines.
  146.  
  147. A:    First, make sure that you have #included <math.h>, and correctly
  148.     declared other functions returning double.  If the problem isn't
  149.     that simple, see the full list for a brief explanation, or any
  150.     good programming book for a better one.
  151.  
  152. 15.2:    I keep getting "undefined: _sin" compilation errors.
  153.  
  154. A:    Make sure you're linking against the correct math library.
  155.  
  156. 15.3:    Why doesn't C have an exponentiation operator?
  157.  
  158. A:    Try using the pow() function.
  159.  
  160. 15.4:    I'm having trouble with a Turbo C program which crashes and says
  161.     something like "floating point formats not linked."
  162.  
  163. A:    Some compilers for small machines, including Turbo C, attempt to
  164.     leave out floating point support if it looks like it will not be
  165.     needed.  The programmer must occasionally insert a dummy
  166.     explicit floating-point call to force loading of floating-point
  167.     support.
  168.  
  169.  
  170. Section 16. System Dependencies
  171.  
  172. 16.1:    How can I read a single character from the keyboard without
  173.     waiting for a newline?
  174.  
  175. A:    Contrary to popular belief and many people's wishes, this is not
  176.     a C-related question.  How to do so is a function of the
  177.     operating system in use.
  178.  
  179. 16.2:    How can I find out if there are characters available for reading
  180.     (and if so, how many)?  Alternatively, how can I do a read that
  181.     will not block if there are no characters available?
  182.  
  183. A:    These, too, are entirely operating-system-specific.
  184.  
  185. 16.3:    How can I clear the screen?
  186.  
  187. A:    Such things depend on the output device you're using.
  188.  
  189. 16.4:    How do I read the mouse?
  190.  
  191. A:    What system are you using?
  192.  
  193. 16.5:    How can my program discover the complete pathname to the
  194.     executable file from which it was invoked?
  195.  
  196. A:    argv[0] may contain all or part of the pathname.  You may be
  197.     able to duplicate the command language interpreter's search path
  198.     logic to locate the executable.
  199.  
  200. 16.6:    How can a process change an environment variable in its caller?
  201.  
  202. A:    In general, it cannot.
  203.  
  204. 16.7:    How can I find out the size of a file, prior to reading it in?
  205.  
  206. A:    You might be able to get an estimate using stat() or
  207.     fseek/ftell.
  208.  
  209. 16.8:    How can a file be shortened in-place without completely clearing
  210.     or rewriting it?
  211.  
  212. A:    There are various ways to do this, but there is no truly
  213.     portable solution.
  214.  
  215. 16.9:    How can I implement a delay, or time a user's response, with
  216.     sub-second resolution?
  217.  
  218. A:    Unfortunately, there is no portable way.
  219.  
  220. 16.10:    How can I read in an object file and jump to routines in it?
  221.  
  222. A:    You want a dynamic linker and/or loader.
  223.  
  224.  
  225. Section 17. Miscellaneous
  226.  
  227. 17.1:    What can I safely assume about the initial values of variables
  228.     which are not explicitly initialized?
  229.  
  230. A:    Variables with "static" duration start out as 0, as if the
  231.     programmer had initialized them.  Variables with "automatic"
  232.     duration, and dynamically-allocated memory, start out containing
  233.     garbage (with the exception of calloc).
  234.  
  235. 17.2:    How can I write data files which can be read on other machines
  236.     with different data formats?
  237.  
  238. A:    The best solution is to use text files.
  239.  
  240. 17.3:    How can I return several values from a function?
  241.  
  242. A:    Either pass pointers to locations which the function can fill
  243.     in, or have the function return a structure containing the
  244.     desired values.
  245.  
  246. 17.4:    How can I call a function, given its name as a string?
  247.  
  248. A:    The most straightforward thing to do is maintain a
  249.     correspondence table of names and function pointers.
  250.  
  251. 17.5:    I seem to be missing the system header file <sgtty.h>.
  252.     Can someone send me a copy?
  253.  
  254. A:    You cannot just pick up a copy of someone else's header file and
  255.     expect it to work, since the definitions within header files are
  256.     frequently system-dependent.  Contact your vendor.
  257.  
  258. 17.6:    How can I call FORTRAN (C++, BASIC, Pascal, Ada, LISP) functions
  259.     from C?
  260.  
  261. A:    The answer is entirely dependent on the machine and the specific
  262.     calling sequences of the various compilers in use.
  263.  
  264. 17.7:    Does anyone know of a program for converting Pascal or FORTRAN
  265.     to C?
  266.  
  267. A:    Several public-domain programs are available, namely ptoc, p2c,
  268.     and f2c.  See the full list for details.
  269.  
  270. 17.8:    Where can I get copies of all these public-domain programs?
  271.  
  272. A:    See the regular postings in the comp.sources.unix and
  273.     comp.sources.misc newsgroups for information.
  274.  
  275. 17.9:    When will the next Obfuscated C Code Contest be held
  276.     How can I get a copy of the previous winning entries?
  277.  
  278. A:    See the full list, or send e-mail to obfuscate@toad.com .
  279.  
  280. 17.10:    Why don't C comments nest?  Are they legal inside quoted
  281.     strings?
  282.  
  283. A:    Nested comments would cause more harm than good.  The character
  284.     sequences /* and */ are not special within double-quoted
  285.     strings.
  286.  
  287. 17.11:    How can I implement sets and/or arrays of bits?
  288.  
  289. A:    Use arrays of char or int, with a few macros to access the right
  290.     bit at the right index.
  291.  
  292. 17.12:    What is the most efficient way to count the number of bits which
  293.     are set in a value?
  294.  
  295. A:    This and many other similar bit-twiddling problems can often be
  296.     sped up and streamlined using lookup tables.
  297.  
  298. 17.13:    How can I make this code more efficient?
  299.  
  300. A:    Efficiency is not important nearly as often as people tend to
  301.     think it is.  Most of the time, by simply paying attention to
  302.     good algorithm choices, perfectly acceptable results can be
  303.     achieved.
  304.  
  305. 17.14:    Are pointers really faster than arrays?  How much do function
  306.     calls slow things down?
  307.  
  308. A:    Precise answers to these and many similar questions depend of
  309.     course on the processor and compiler in use.
  310.  
  311. 17.15:    This program crashes before it even runs!
  312.  
  313. A:    Look for very large, local arrays.
  314.     (See also question 9.4.)
  315.  
  316. 17.16:    What does "Segmentation violation" mean?
  317.  
  318. A:    It generally means that your program tried to access memory it
  319.     shouldn't have.
  320.  
  321. 17.17:    Does anyone have a C compiler test suite I can use?
  322.  
  323. A:    Plum Hall, among others, sells one.
  324.  
  325. 17.18:    Where can I get a YACC grammar for C?
  326.  
  327. A:    See the ANSI Standard, or the unabridged list.
  328.  
  329. 17.19:    How do you pronounce "char"?
  330.  
  331. A:    Like the English words "char," "care," or "car" (your choice).
  332.  
  333. 17.20:    What's a good book for learning C?
  334.  
  335. A:    There are far too many to list here; the full list contains a
  336.     few pointers.
  337.  
  338. 17.21:    Where can I get extra copies of this list?
  339.  
  340. A:    For now, just pull it off the net; the unabridged version is
  341.     normally posted on the first of each month, with an Expiration:
  342.     line which should keep it around all month.  It can also be
  343.     found in the newsgroup news.answers .  Several sites archive
  344.     news.answers postings and other FAQ lists, including this one;
  345.     the archie server should help you find them.
  346.  
  347.  
  348.                     Steve Summit
  349.                     scs@adam.mit.edu
  350.                     scs%adam.mit.edu@mit.edu
  351.                     mit-eddie!adam.mit.edu!scs
  352.  
  353. This article is Copyright 1988, 1990-1992 by Steve Summit.
  354. It may be freely redistributed so long as the author's name, and this
  355. notice, are retained.
  356. Xref: bloom-picayune.mit.edu comp.lang.c:59948 news.answers:3846
  357. Newsgroups: comp.lang.c,news.answers
  358. Path: bloom-picayune.mit.edu!adam.mit.edu!scs
  359. From: scs@adam.mit.edu (Steve Summit)
  360. Subject: comp.lang.c Changes to Answers to Frequently Asked Questions (FAQ)
  361. Message-ID: <1992Nov3.010510.14974@athena.mit.edu>
  362. Followup-To: poster
  363. Sender: news@athena.mit.edu (News system)
  364. Supersedes: <1992Oct1.210814.22950@athena.mit.edu>
  365. Nntp-Posting-Host: adam.mit.edu
  366. Reply-To: scs@adam.mit.edu
  367. X-Archive-Name: C-faq/diff
  368. Organization: none, at the moment
  369. Date: Tue, 3 Nov 1992 01:05:10 GMT
  370. Approved: news-answers-request@MIT.Edu
  371. Lines: 340
  372.  
  373. Archive-name: C-faq/diff
  374.  
  375. This article contains changes between the previous revision of
  376. the comp.lang.c frequently-asked questions list (posted on
  377. October 1) and the new one.  (Do _not_ worry if you have not seen
  378. the new one yet; it's coming up next.)  As usual, these diffs
  379. have been edited for readability, and are not suitable for use
  380. with the patch program.
  381.  
  382. The changes this month are mostly minor and/or cosmetic.  The
  383. only mildly significant and/or interesting one is that I had
  384. somehow managed to add the same question twice (what had been 2.5
  385. and 2.6); thanks to Mark Brader for pointing this out.
  386.  
  387. ==========
  388. < [Last modified October 1, 1992 by scs.]
  389. ---
  390. > [Last modified November 2, 1992 by scs.]
  391. ==========
  392.     pointer arguments.  To generate a null pointer in a function
  393. <     call context, an explicit cast is typically required:
  394. ---
  395. >     call context, an explicit cast is typically required, to force
  396. >     the 0 to be in a pointer context:
  397. ==========
  398.     6.    The "null string," which is another name for an empty
  399. <         string.  The term "null string" can be confusing in C
  400. ---
  401. >         string ("").  The term "null string" can be confusing in
  402. ==========
  403. <     (The exceptions are when the array is the operand of a sizeof()
  404. <     or & operator, or is a literal string initializer for a
  405. ---
  406. >     (The exceptions are when the array is the operand of a sizeof or
  407. >     & operator, or is a literal string initializer for a character
  408. ==========
  409.   A:    Since arrays decay immediately into pointers, an array is never
  410. <     actually passed to a function.  Therefore, any parameter
  411. ---
  412. >     actually passed to a function.  As a convenience, any parameter
  413. ==========
  414. < 2.5:    Why doesn't sizeof() properly report the size of an array that's
  415. <     a parameter to a subroutine?
  416. <
  417. < A:    sizeof() reports the size of the pointer parameter which the
  418. <     subroutine really receives (see question 2.4).
  419. <
  420. < 2.6:    Why doesn't sizeof(array) work when the array is a function
  421. <     parameter?
  422. <
  423. < A:    The compiler pretends that the array parameter was declared as a
  424. <     pointer (see question 2.4), and sizeof reports the size of the
  425. <     pointer.
  426. ---
  427. > 2.5:    Why doesn't sizeof properly report the size of an array which is
  428. >     a parameter to a function?
  429. >
  430. > A:    The sizeof operator reports the size of the pointer parameter
  431. >     which the function actually receives (see question 2.4).
  432. ==========
  433.     no longer needed.  You must also be extremely cautious when
  434. <     passing dynamically-allocated arrays down to other subroutines,
  435. <     if those subroutines are also to accept conventional,
  436. ---
  437. >     passing dynamically-allocated arrays down to other functions, if
  438. >     those functions are also to accept conventional, statically-
  439. ==========
  440. < 2.13:    I passed a pointer to a subroutine which initialized it:
  441. ---
  442. > 2.12:    I passed a pointer to a function which initialized it:
  443. ==========
  444.             static int dummy;
  445. <             ip = &i;
  446. ---
  447. >             ip = &dummy;
  448. ==========
  449. < A:    Did the subroutine try to initialize the pointer itself, or just
  450. ---
  451. > A:    Did the function try to initialize the pointer itself, or just
  452. ==========
  453. <     value.  The called subroutine altered only the passed copy of
  454. <     the pointer.  You'll want to pass the address of the pointer
  455. <     (the subroutine will end up accepting a pointer-to-a-pointer).
  456. ---
  457. >     value.  The called function altered only the passed copy of the
  458. >     pointer.  You'll want to pass the address of the pointer (the
  459. >     function will end up accepting a pointer-to-a-pointer).
  460. ==========
  461. < 3.4:    I have a function that returns a string, and it seems to work
  462. <     fine under the debugger, but when it returns to its caller, the
  463. <     returned string is garbage.
  464. ---
  465. > 3.4:    I have a function that is supposed to return a string, but when
  466. >     it returns to its caller, the returned string is garbage.
  467. ==========
  468.   A:    Under C's integral promotion rules, the multiplication is
  469. <     carried out using integer arithmetic, and the result overflows
  470. <     and/or is truncated before being assigned to the long int left-
  471. ---
  472. >     carried out using int arithmetic, and the result may overflow
  473. >     and/or be truncated before being assigned to the long int left-
  474. ==========
  475.     "int func(x) float x;".  Old C (and ANSI C, in the absence of
  476. <     prototypes) silently promotes floats to doubles when passing
  477. <     them as arguments, and arranges that doubles being passed are
  478. <     coerced back to floats if the formal parameters are declared
  479. <     that way.
  480. ---
  481. >     prototypes, and in variable-length argument lists) "widens"
  482. >     certain arguments when they are passed to functions.  floats
  483. >     are promoted to double, and characters and short integers are
  484. >     promoted to integers.  (The values are automatically coerced
  485. >     back to the corresponding narrower types within the body of the
  486. >     called function, if they are declared that way there.)
  487. ==========
  488. <     rely on such an extension?  It is usually a bad idea to try to
  489. <     determine language properties, especially pertaining to the ANSI
  490. <     Standard, by performing experiments with a particular compiler.
  491. ---
  492. >     rely on such an extension?  It is usually a bad idea to perform
  493. >     experiments with a particular compiler to determine properties
  494. >     of a language; the applicable standard may permit variations, or
  495. >     the compiler may be wrong.
  496. ==========
  497.   A:    There is no good answer to this question.  If the values are
  498.     integers, a well-known trick using exclusive-OR could perhaps be
  499.     used, but it will not work for floating-point values or
  500. <     pointers, (and it will not work if the two values are the same
  501. <     variable, and the "obvious" supercompressed implementation for
  502. <     integral types a^=b^=a^=b is, strictly speaking, illegal due to
  503. <     multiple side-effects, and...).  If the macro is intended to be
  504. ---
  505. >     pointers, or if the two values are the same variable (and the
  506. >     "obvious" supercompressed implementation for integral types
  507. >     a^=b^=a^=b is in fact illegal due to multiple side-effects,
  508. >     and...).  If the macro is intended to be used on values of
  509. ==========
  510.     The best all-around solution is probably to forget about using a
  511. <     macro, unless you don't mind passing in the type as a third
  512. ---
  513. >     macro, unless you're willing to pass in the type as a third
  514. ==========
  515. < 6.5:    Does sizeof() work in preprocessor #if directives?
  516. ---
  517. > 6.5:    Does the sizeof operator work in preprocessor #if directives?
  518. ==========
  519.     compilation, before type names have been parsed.  Consider using
  520. <     the predefined constants in <limits.h>, or a "configure" script,
  521. ---
  522. >     the predefined constants in ANSI's <limits.h>, or a "configure"
  523. ==========
  524. <         #include <stddef.h>        /* for NULL, size_t */
  525. <         #include <stdlib.h>        /* for malloc */
  526. ---
  527. >         #include <stdlib.h>        /* for malloc, NULL, size_t */
  528. ==========
  529.     Under a pre-ANSI compiler, rewrite the function definition
  530.     without a prototype ("char *vstrcat(first) char *first; {"),
  531. <     include <stdio.h> rather than <stddef.h>, replace "#include
  532. <     <stdlib.h>" with "extern char *malloc();", and use int instead
  533. ---
  534. >     include <stdio.h> rather than <stdlib.h>, add "extern
  535. >     char *malloc();", and use int instead of size_t.  You may also
  536. ==========
  537. >     Remember that in variable-length argument lists, function
  538. >     prototypes do not supply parameter type information; therefore,
  539. >     default argument promotions apply (see question 5.6), and null
  540. >     pointer arguments must be typed explicitly (see question 1.2).
  541. ==========
  542. < A:    Structures may have this padding, so that alignment properties
  543. <     will be preserved when an array of contiguous structures is
  544. <     allocated.
  545. ---
  546. > A:    Structures may have this padding (as well as internal padding;
  547. >     see also question 9.5), so that alignment properties will be
  548. >     preserved when an array of contiguous structures is allocated.
  549. ==========
  550. < 9.10:    How can I turn off structure padding, so that I can get a struct
  551. <     to conform to an externally-imposed storage layout?
  552. ---
  553. > 9.10:    My compiler is leaving holes in structures, which is wasting
  554. >     space and preventing "binary" I/O to external data files.  Can I
  555. >     turn off the padding, or otherwise control the alignment of
  556. >     structs?
  557. ==========
  558. <     attempting to conform to some externally-imposted storage
  559. ---
  560. >     attempting to conform to some externally-imposed storage layout,
  561. ==========
  562. <     It is usually better to use fgets() to read a whole line, and
  563. <     then use sscanf() or other string functions to pick apart the
  564. <     line buffer.
  565. ---
  566. >     It is usually better to use fgets to read a whole line, and
  567. >     then use sscanf or other string functions to pick apart the line
  568. >     buffer.  If you do use sscanf, don't forget to check the return
  569. >     value to make sure that the expected number of items were found.
  570. ==========
  571. <     links).  It is best to remember the names of open files yourself
  572. <     (perhaps with a wrapper function around fopen).
  573. ---
  574. >     links).  It is best to remember the names of files yourself when
  575. >     you open them (perhaps with a wrapper function around fopen).
  576. ==========
  577. < 12.7:    Each time I run my program, I get the same sequence of random
  578. <     numbers.
  579. ---
  580. > 12.7:    Each time I run my program, I get the same sequence of numbers
  581. >     back from rand().
  582. ==========
  583.   A:    You can call srand() to seed the pseudo-random number generator
  584. <     with a more random value.  Popular random initial seeds are the
  585. ---
  586. >     with a more random initial value.  Popular random initial seeds
  587. ==========
  588. < A:    Try running lint first.  Many C compilers are really only half-
  589. ---
  590. > A:    Try running lint first (perhaps with the -a, -c, -h, -p and/or
  591. >     other options).  Many C compilers are really only half-
  592. ==========
  593.   A:    Make sure you're linking against the correct math library.  For
  594. <     instance, under Unix, you usually need to add -lm after the
  595. <     source and object files when compiling/linking.
  596. ---
  597. >     instance, under Unix, you usually need to use the -lm option at
  598. >     the end of the command line when compiling/linking.
  599. ==========
  600.   A:    You can #include <math.h> and use the pow() function, although
  601. <     explicit multiplication is often better for small integral
  602. <     exponents.
  603. ---
  604. >     explicit multiplication is often better for small positive
  605. >     integral exponents.
  606. ==========
  607.   A:    BSD systems provide ftruncate(), several others supply chsize(),
  608.     and a few may provide a (possibly undocumented) fcntl option
  609.     F_FREESP.  Under MS-DOS, you can sometimes use
  610. <     write(fd, (char *)NULL, 0).  However, but there is no truly
  611. <     portable solution.
  612. ---
  613. >     write(fd, "x", 0).  However, there is no truly portable
  614. >     solution.
  615. ==========
  616. < 17.3:    How can I return several values from a subroutine?
  617. ---
  618. > 17.3:    How can I return several values from a function?
  619. ==========
  620. < A:    Either pass pointers which the subroutine can fill in, or have
  621. <     the subroutine return a structure containing the desired values.
  622. ---
  623. > A:    Either pass pointers to locations which the function can fill
  624. >     in, or have the function return a structure containing the
  625. ==========
  626. < 17.7:    Does anyone know of a program for converting Pascal (FORTRAN,
  627. <     LISP, "Old" C, ...) to C?
  628. ---
  629. > 17.7:    Does anyone know of a program for converting Pascal or FORTRAN
  630. >     (or LISP, Ada, AWK, "Old" C, ...) to C?
  631. ==========
  632. <     A PL/M to C converter was posted to alt.sources in April, 1991.
  633. <
  634. <     The following companies sell various translation tools and
  635. <     services:
  636. <
  637. <         Cobalt Blue
  638. <         2940 Union Ave., Suite C
  639. <         San Jose, CA  95124  USA
  640. <         (+1) 408 723 0474
  641. <
  642. <         Promula Development Corp.
  643. <         3620 N. High St., Suite 301
  644. <         Columbus, OH  43214  USA
  645. <         (+1) 614 263 5454
  646. <
  647. <         Micro-Processor Services Inc.
  648. <         92 Stone Hurst Lane
  649. <         Dix Hills, NY  11746  USA
  650. <         (+1) 519 499 4461
  651. ---
  652. >     This FAQ list's maintainer also has available a list of other
  653. >     commercial translation products, and some for more obscure
  654. >     languages.
  655. ==========
  656.   A:    The contest typically runs from early March through mid-May.  To
  657.     obtain a current copy of the rules and other information, send
  658.     e-mail with the Subject: line "send rules" to:
  659.  
  660. <         {apple,pyramid,sun,uunet}!hoptoad!judges  or  judges@toad.com
  661. ---
  662. >         {apple,pyramid,sun,uunet}!hoptoad!obfuscate  or
  663. >         obfuscate@toad.com
  664. ==========
  665.   A:    Use arrays of char or int, with a few macros to access the right
  666. <     bit at the right index:
  667. ---
  668. >     bit at the right index (try using 8 for CHAR_BIT if you don't
  669. >     have <limits.h>):
  670. ==========
  671. <         #define Mask(bit) (1 << ((bit) % CHAR_BIT))
  672. <         #define Slot(bit) ((bit) / CHAR_BIT)
  673. <         #define Set(ary, bit) ((ary)[Slot(bit)] |= Mask(bit))
  674. <         #define Test(ary, bit) ((ary)[Slot(bit)] & Mask(bit))
  675. ---
  676. >         #define BITMASK(bit) (1 << ((bit) % CHAR_BIT))
  677. >         #define BITSLOT(bit) ((bit) / CHAR_BIT)
  678. >         #define BITSET(ary, bit) ((ary)[BITSLOT(bit)] |= BITMASK(bit))
  679. >         #define BITTEST(ary, bit) ((ary)[BITSLOT(bit)] & BITMASK(bit))
  680. ==========
  681. > 17.19: How do you pronounce "char"?
  682. >
  683. > A:    You can pronounce the C keyword "char" in at least three ways:
  684. >     like the English words "char," "care," or "car;" the choice is
  685. >     arbitrary.
  686. ==========
  687. > Knuth    Donald E. Knuth, The Art of Computer Programming, (3 vols.),
  688. >     Addison Wesley, 1981.
  689. ==========
  690.   Thanks to Jamshid Afshar, Sudheer Apte, Dan Bernstein, Stan Brown, Joe
  691.   Buehler, Burkhard Burow, D'Arcy J.M. Cain, Raymond Chen, Christopher
  692.   Calabrese, James Davies, Norm Diamond, Ray Dunn, Stephen M. Dunn, Bjorn
  693.   Engsig, Dave Gillespie, Samuel Goldstein, Alasdair Grant, Ron Guilmette,
  694.   Doug Gwyn, Tony Hansen, Joe Harrington, Guy Harris, Jos Horsmeier, Blair
  695.   Houghton, Kirk Johnson, Peter Klausler, Andrew Koenig, Tom Koenig, John
  696. > Lauro, Don Libes, Christopher Lott, Tim McDaniel, Evan Manning, Barry
  697. > Margolin, Mark Moraes, Darren Morby, Richard A. O'Keefe, Hans Olsson,
  698.   Francois Pinard, randall@virginia, Pat Rankin, Rich Salz, Chip
  699.   Salzenberg, Paul Sand, Doug Schmidt, Patricia Shanahan, Peter da Silva,
  700.   Joshua Simons, Henry Spencer, Erik Talvola, Clarke Thatcher, Chris
  701.   Torek, Goran Uddeborg, Wietse Venema, Ed Vielmetti, Larry Virden, Freek
  702.   Wiedijk, and Dave Wolverton, who have contributed, directly or
  703.   indirectly, to this article.  Special thanks to Karl Heuer, and
  704.   particularly to Mark Brader, who (to borrow a line from Steve Johnson)
  705.   have goaded me beyond my inclination, and occasionally beyond my
  706.   endurance, in relentless pursuit of a better FAQ list.
  707. ==========
  708.  
  709.                     Steve Summit
  710.                     scs@adam.mit.edu
  711.                     scs%adam.mit.edu@mit.edu
  712.                     mit-eddie!adam.mit.edu!scs
  713. Xref: bloom-picayune.mit.edu comp.lang.c:61497 news.answers:4291
  714. Newsgroups: comp.lang.c,news.answers
  715. Path: bloom-picayune.mit.edu!adam.mit.edu!scs
  716. From: scs@adam.mit.edu (Steve Summit)
  717. Subject: comp.lang.c Answers to Frequently Asked Questions (FAQ List)
  718. Message-ID: <1992Dec1.025024.25129@athena.mit.edu>
  719. Followup-To: poster
  720. Sender: news@athena.mit.edu (News system)
  721. Supersedes: <1992Nov3.010706.15151@athena.mit.edu>
  722. Nntp-Posting-Host: adam.mit.edu
  723. Reply-To: scs@adam.mit.edu
  724. X-Archive-Name: C-faq/faq
  725. Organization: none, at the moment
  726. Date: Tue, 1 Dec 1992 02:50:24 GMT
  727. X-Last-Modified: November 2, 1992
  728. Approved: news-answers-request@MIT.Edu
  729. Expires: Sun, 3 Jan 1993 00:00:00 GMT
  730. Lines: 2879
  731.  
  732. Archive-name: C-faq/faq
  733. Newsgroup-name-archive-name: C-FAQ-list
  734.  
  735. [Last modified November 2, 1992 by scs.]
  736.  
  737. Certain topics come up again and again on this newsgroup.  They are good
  738. questions, and the answers may not be immediately obvious, but each time
  739. they recur, much net bandwidth and reader time is wasted on repetitive
  740. responses, and on tedious corrections to the incorrect answers which are
  741. inevitably posted.
  742.  
  743. This article, which is posted monthly, attempts to answer these common
  744. questions definitively and succinctly, so that net discussion can move
  745. on to more constructive topics without continual regression to first
  746. principles.
  747.  
  748. No mere newsgroup article can substitute for thoughtful perusal of a
  749. full-length tutorial or language reference manual.  Anyone interested
  750. enough in C to be following this newsgroup should also be interested
  751. enough to read and study one or more such manuals, preferably several
  752. times.  Some vendors' compiler manuals are unfortunately inadequate; a
  753. few even perpetuate some of the myths which this article attempts to
  754. refute.  Several noteworthy books on C are listed in this article's
  755. bibliography.  Many of the questions and answers are cross-referenced to
  756. these books, for further study by the interested and dedicated reader
  757. (but beware of ANSI vs. ISO C Standard section numbers; see question
  758. 5.1).
  759.  
  760. If you have a question about C which is not answered in this article,
  761. first try to answer it by checking a few of the referenced books, or by
  762. asking knowledgeable colleagues, before posing your question to the net
  763. at large.  There are many people on the net who are happy to answer
  764. questions, but the volume of repetitive answers posted to one question,
  765. as well as the growing number of questions as the net attracts more
  766. readers, can become oppressive.  If you have questions or comments
  767. prompted by this article, please reply by mail rather than following up
  768. -- this article is meant to decrease net traffic, not increase it.
  769.